 <?php 
 
 
/**
* trys to find the value for the given environment vriable name
*
* searchs in $_SERVER, $_ENV than trys getenv( ) and apache_getenv( )
* in this order
*
* @param string $var_name variable name
* @return string value of $var or empty string
*/
function PMA_getenv( $var_name )
{
	if ( isset( $_SERVER[$var_name] ) )
		return $_SERVER[$var_name];
	elseif ( isset( $_ENV[$var_name] ) )
		return $_ENV[$var_name];
	elseif ( getenv( $var_name ) )
		return getenv( $var_name );
	elseif ( function_exists( 'apache_getenv' ) && apache_getenv( $var_name, true ) )
		return apache_getenv( $var_name, true );
	return '';
}

function advanceGetIp()
{
	global $REMOTE_ADDR;
	global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
	global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;
	// Get some server/environment variables values
	if( empty( $REMOTE_ADDR ) && PMA_getenv( 'REMOTE_ADDR' ) )
		$REMOTE_ADDR = PMA_getenv( 'REMOTE_ADDR' );
	if ( empty( $HTTP_X_FORWARDED_FOR ) && PMA_getenv( 'HTTP_X_FORWARDED_FOR' ) )
		$HTTP_X_FORWARDED_FOR = PMA_getenv( 'HTTP_X_FORWARDED_FOR' );
	if( empty( $HTTP_X_FORWARDED ) && PMA_getenv( 'HTTP_X_FORWARDED' ) )
		$HTTP_X_FORWARDED = PMA_getenv( 'HTTP_X_FORWARDED' );
	if ( empty( $HTTP_FORWARDED_FOR ) && PMA_getenv( 'HTTP_FORWARDED_FOR' ) )
		$HTTP_FORWARDED_FOR = PMA_getenv( 'HTTP_FORWARDED_FOR' );
	if ( empty( $HTTP_FORWARDED ) && PMA_getenv( 'HTTP_FORWARDED' ) )
		$HTTP_FORWARDED = PMA_getenv( 'HTTP_FORWARDED' );
	if ( empty( $HTTP_VIA ) && PMA_getenv( 'HTTP_VIA' ) )
		$HTTP_VIA = PMA_getenv( 'HTTP_VIA' );
	if ( empty( $HTTP_X_COMING_FROM ) && PMA_getenv( 'HTTP_X_COMING_FROM' ) )
		$HTTP_X_COMING_FROM = PMA_getenv( 'HTTP_X_COMING_FROM' );
	if ( empty( $HTTP_COMING_FROM ) && PMA_getenv( 'HTTP_COMING_FROM' ) )
		$HTTP_COMING_FROM = PMA_getenv( 'HTTP_COMING_FROM' );
	// Gets the default ip sent by the user
	if ( !empty( $REMOTE_ADDR ) )
		$direct_ip = $REMOTE_ADDR;
	// Gets the proxy ip sent by the user
	$proxy_ip = '';
	if ( !empty( $HTTP_X_FORWARDED_FOR ) )
		$proxy_ip = $HTTP_X_FORWARDED_FOR;
	elseif ( !empty( $HTTP_X_FORWARDED ) )
		$proxy_ip = $HTTP_X_FORWARDED;
	elseif ( !empty( $HTTP_FORWARDED_FOR ) )
		$proxy_ip = $HTTP_FORWARDED_FOR;
	elseif ( !empty( $HTTP_FORWARDED ) )
		$proxy_ip = $HTTP_FORWARDED;
	elseif ( !empty( $HTTP_VIA ) )
		$proxy_ip = $HTTP_VIA;
	elseif ( !empty( $HTTP_X_COMING_FROM ) )
		$proxy_ip = $HTTP_X_COMING_FROM;
	elseif ( !empty( $HTTP_COMING_FROM ) )
		$proxy_ip = $HTTP_COMING_FROM;
	// end if... elseif...
	// Returns the true IP if it has been found, else FALSE
	if ( empty( $proxy_ip ) )
	return $direct_ip; // True IP without proxy
	else
	{
		$is_ip = preg_match( '|^( [0-9]{1,3}\. ){3,3}[0-9]{1,3}|', $proxy_ip, $regs );
		if ( $is_ip && ( count( $regs ) > 0 ) )
		return $regs[0]; // True IP behind a proxy
		else
		{
			// Can't define IP: there is a proxy but we don't have
			// information about the true IP
			return $direct_ip; 
			//return FALSE;
		}
	} // end if... else...
} // end of the 'PMA_getIp( )' function

function getIP(){
	return advanceGetIp();
}
?>